// Copyright (C) 2023 即时通讯网(52im.net) & Jack Jiang.
// The RainbowChat Project. All rights reserved.
// 
// 【本产品为著作权产品，合法授权后请放心使用，禁止外传！】
// 【本次授权给：<北京小羊驼科技有限公司>，授权编号：<NT231212144350>，代码指纹：<A.702363430.550>，技术对接人微信：<ID: wxid_wbyootvkdcgj22>】
// 【授权寄送：<收件：苏先生、地址：北京市大兴区北京密码西区6号楼1单元301、电话：18613885610、邮箱：bd@huiyuanxiang-inc.com>】
// 
// 【本系列产品在国家版权局的著作权登记信息如下】：
// 1）国家版权局登记名(简称)和权证号：RainbowChat    （证书号：软著登字第1220494号、登记号：2016SR041877）
// 2）国家版权局登记名(简称)和权证号：RainbowChat-Web（证书号：软著登字第3743440号、登记号：2019SR0322683）
// 3）国家版权局登记名(简称)和权证号：RainbowAV      （证书号：软著登字第2262004号、登记号：2017SR676720）
// 4）国家版权局登记名(简称)和权证号：MobileIMSDK-Web（证书号：软著登字第2262073号、登记号：2017SR676789）
// 5）国家版权局登记名(简称)和权证号：MobileIMSDK    （证书号：软著登字第1220581号、登记号：2016SR041964）
// * 著作权所有人：江顺/苏州网际时代信息科技有限公司
// 
// 【违法或违规使用投诉和举报方式】：
// 联系邮件：jack.jiang@52im.net
// 联系微信：hellojackjiang
// 联系QQ号：413980957
// 授权说明：http://www.52im.net/thread-1115-1-1.html
// 官方社区：http://www.52im.net
package com.x52im.rbchat.logic.profile.voice;

import android.content.Context;

import com.x52im.rbchat.logic.chat_root.sendvoice.SendVoiceHelper;
import com.x52im.rbchat.logic.chat_root.sendvoice.SendVoiceProcessor;
import com.x52im.rbchat.utils.PromtHelper;

import java.util.Observable;
import java.util.Observer;

/**
 * 个人介绍的语音留言文件上传的真正实现类.
 * <p>
 * 此类通知在类{@link UploadPVoiceWrapper}中使用.
 * <p>
 * 本类完全参考自{@link SendVoiceProcessor}
 * ，为了提升代码的可维护灵活性和后期的变动的可能，因而没考虑重用。
 * 
 * @author Jack Jiang(http://www.52im.net/space-uid-1.html)
 * @since 2.5
 */
public abstract class UploadPVoiceProcessor
{
	private final static String TAG = UploadPVoiceProcessor.class.getSimpleName();
	
	private Context context = null;
	/** 将要被发送的语音文件临时路径（本类要发送的就是它） */
	private String tempVoicePath = null;
	/** 语音时长(用于文件命名时)（单位：毫秒） */
	private long duration = 0;
	
	/** 
	 * 经过重命名处理后真正要发送出去的文件名（此文件名可作为发送方的本地缓存直接使用）.
	 * 除非重命名处理成功完成，否则本字段将一直是null. */
	private String processedFileName = null;
	
	public UploadPVoiceProcessor(Context context
			, String tempVoicePath
			, long duration)
	{
		this.context = context;
		this.tempVoicePath = tempVoicePath;
		this.duration = duration;
	}
	
	/**
	 * 真正的文件发送过程.
	 */
	public void doSend()
	{
		boolean beforeSendOK = SendVoiceProcessor.beforeSend(context, tempVoicePath
				, duration, SendVoiceHelper.MIN_DURATION_FOR_SEND
				, new Observer(){
					@Override
					public void update(Observable observable, Object data)
					{
						// 将重命名后的文件名保存到全局变量保存
						processedFileName = (String)data;
					}
				}
		);
		if(beforeSendOK)
		{
			// 开始发送语音的提示音
			PromtHelper.voiceSendPromt(context);
			
			// 真正的上传实现方法.
			processUpload(processedFileName);
		}
	}
	
	/**
	 * 真正的上传实现方法.
	 * 
	 * @param voiceFileNameAfterPreprocess 经过上传前的预处理（预处理包括文件合法性检查、按MD5码重命名等）后的语音文件文件名
	 */
	protected abstract void processUpload(String voiceFileNameAfterPreprocess);
}